#pragma once

#include "nlohmann/json.hpp"

/**
 * @brief 从文件加载JSON对象
 *
 * @param filepath JSON文件路径
 * @return nlohmann::json 加载的JSON对象
 * @throws std::runtime_error 如果文件打开失败或JSON解析失败
 */
nlohmann::json loadJsonFile(const std::string &filepath);

/**
 * @brief 获取JSON对象中必填字段的值
 *
 * @tparam T 字段值的类型
 * @param j JSON对象
 * @param key 字段名
 * @return T 字段值
 * @throws std::runtime_error 如果字段不存在或类型不匹配
 */
template <typename T>
T getJsonValue(const nlohmann::json &j, const std::string &key)
{
    if (!j.contains(key)) {
        throw std::runtime_error("Required key '" + key + "' not found in JSON object.");
    }
    return j.at(key).get<T>();
}